ubuntu系统使用ipvs+keeplived+nginx+tomcat实现负载均衡高可用服务搭建教程 您所在的位置:网站首页 keepalived nginx配置 ubuntu系统使用ipvs+keeplived+nginx+tomcat实现负载均衡高可用服务搭建教程

ubuntu系统使用ipvs+keeplived+nginx+tomcat实现负载均衡高可用服务搭建教程

2023-09-10 13:11| 来源: 网络整理| 查看: 265

关闭服务器防火墙;

ufw disable

打开内核转发功能;

sysctl -w net.ipv4.ip_forward=1

配置ipvs,ipvs无需安装,安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive。ipvsadm是通过命令行管理,而keepalive读取配置文件管理。

apt-get install ipvsadm

将ipvsadm模块加载进系统中;

ipvsadm lsmod | grep ip_vs

安装keepalived

apt-get install keepalived

keepalived相关配置/etc/keepalived/keepalived.conf

主服务器:

global_defs { router_id LVS_DEVEL } vrrp_instance VI_1 { #定义一个实例,keepalived间的高可用只能接管相同实例名称 state MASTER #指定Keepalived的角色,MASTER表示此主机是主服务器 BACKUP表示此主机是备用服务器,所以设置priority时要注意MASTER比BACKUP高。 interface ens33 #指定监测网络的接口,当LVS接管时,将会把IP地址添加到该网卡上。 virtual_router_id 51 #虚拟路由标识,同一个vrrp实例使用唯一的标识,同一个vrrp_instance下,MASTER和BACKUP必须一致。 priority 120 #指定这个实例优先级 advert_int 1 #心跳报文发送间隔 mcast_src_ip 192.168.98.7 authentication { auth_type PASS #设置验证类型,主要有PASS和AH两种 auth_pass 1111 #设置验证密码,同一个vrrp_instance下,MASTER和BACKUP的密码必须一致才能正常通信 } virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个 192.168.98.100 } } virtual_server 192.168.98.100 80 { #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开 delay_loop 6 #设置运行情况检查时间,单位是秒 lb_algo wrr #设置负载调试算法,这里设置为wrr即加权论询算法 lb_kind DR #设置LVS实现负载均衡的机制,有NAT,TUN和DR三个模式可选 persistence_timeout 50 #设置会话保持时间,单位是秒 protocol TCP #指定转发协议类型,有TCP和UDP两种 real_server 192.168.98.7 80 { #配置服务节点1,需要指定real server的真实IP地址和端口 weight 1 #配置服务节点的权值, TCP_CHECK { connect_timeout 8 #表示8秒无响应超时 retry 3 #表示重试次数 delay_before_retry 3 #表示重试间隔 connect_port 80 #使用80端口进行保活 } } real_server 192.168.98.14 80 { weight 1 TCP_CHECK { connect_timeout 8 retry 3 delay_before_retry 3 connect_port 80 } } }

从服务器:

global_defs { router_id LVS_DEVEL } vrrp_instance VI_1 { #定义一个实例,keepalived间的高可用只能接管相同实例名称 state BACKUP #指定Keepalived的角色,MASTER表示此主机是主服务器 BACKUP表示此主机是备用服务器,所以设置priority时要注意MASTER比BACKUP高。 interface ens33 #指定监测网络的接口,当LVS接管时,将会把IP地址添加到该网卡上。 virtual_router_id 51 #虚拟路由标识,同一个vrrp实例使用唯一的标识,同一个vrrp_instance下,MASTER和BACKUP必须一致。 priority 100 #指定这个实例优先级 advert_int 1 #心跳报文发送间隔 mcast_src_ip 192.168.98.7 authentication { auth_type PASS #设置验证类型,主要有PASS和AH两种 auth_pass 1111 #设置验证密码,同一个vrrp_instance下,MASTER和BACKUP的密码必须一致才能正常通信 } virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个 192.168.98.100 } } virtual_server 192.168.98.100 80 { #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开 delay_loop 6 #设置运行情况检查时间,单位是秒 lb_algo wrr #设置负载调试算法,这里设置为wrr即加权论询算法 lb_kind DR #设置LVS实现负载均衡的机制,有NAT,TUN和DR三个模式可选 persistence_timeout 50 #设置会话保持时间,单位是秒 protocol TCP #指定转发协议类型,有TCP和UDP两种 real_server 192.168.98.7 80 { #配置服务节点1,需要指定real server的真实IP地址和端口 weight 1 #配置服务节点的权值, TCP_CHECK { connect_timeout 8 #表示8秒无响应超时 retry 3 #表示重试次数 delay_before_retry 3 #表示重试间隔 connect_port 80 #使用80端口进行保活 } } real_server 192.168.98.14 80 { weight 1 TCP_CHECK { connect_timeout 8 retry 3 delay_before_retry 3 connect_port 80 } } }

安装nginx,两台服务器相同;

在两台服务器中分别安装nginx;

apt-get install nginx

启动nginx成功;

service nginx start

查看nginx是否启动成功;

在这里插入图片描述

编辑nginx默认页面,加上特定信息用于分辨主从服务器,编辑内容自定义即可;

vi /var/www/html/index.nginx-debian.html

在这里插入图片描述

编写脚本服务;

给编写的脚本赋予权限;

chmod u+x realserver.sh

在/home/user/下新建realserver.sh文件,写入以下内容;

#!/bin/bash SNS_VIP=192.168.98.100 #此处ip必须与keepalived中虚拟ip相同 #. /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP /sbin/route add -host $SNS_VIP dev lo:0 echo "0" >/proc/sys/net/ipv4/ip_forward echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce sysctl -p >/dev/null 2>&1 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $SNS_VIP >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0

在主服务器中的/etc/nginx/conf.d/下新建自定义配置文件nginx.conf,内容为;

upstream load_banance { #负载均衡方法,可选:least_conn,ip_hash等,不填写则为轮询方式; #服务器的访问地址,最好使用服务器的私有IP以获得更好的性能和安全性。 server 192.168.98.7:80 weight=1; server 192.168.98.14:80 weight=2; } server { #负载均衡的监听端口 listen 80; #负载均衡服务器的服务名称,没有时填写_ server_name _; location / { #代理转发,注意这个load_banance要与upstream后的字符串相同 proxy_pass http://load_banance; } } 配置完成后重启nginx;

配置lvs+keepalived+ngixn成功进行测试;

启动keepalived;

service keepalived start #启动命令 service keepalived stop #停止命令 service keepalived restart #重启命令 service keepalived status #查看状态

查看虚拟ip,主服务器上有,从服务器没有;

在这里插入图片描述

启动nginx;

service ngixn start

运行realserver.sh脚本;

/home/user/realserver.sh start #启动 /home/user/realserver.sh stop #停止

负载均衡测试;

访问虚拟ip,第一次访问与第二次访问的nginx不同,实现了负载均衡效果;

在这里插入图片描述

在这里插入图片描述

如上述效果没有实现可能是因为端口80的问题,可通过以下操作进行修改;

修改/etc/nginx/sites-enabled/default配置文件,/etc/nginx/sites-available/default配置文件也会同步修改,内容如下

在这里插入图片描述

修改/etc/nginx/conf.d/nginx.conf文件,内容如下

在这里插入图片描述

故障测试;

模拟主服务器故障情况,关闭主服务器模拟宕机情况,分别查看两台服务器的vip,此时主服务器上的vip漂移到从服务器上;

在这里插入图片描述

启动主服务器,分别查看两台服务器的vip,此时vip回到主服务器上;

在两台服务器上分别安装Tomcat服务;

在/usr/local文件夹下创建java文件夹;

下载jdk-8u333-linunx-x64.tar.gz压缩包,上传到服务器/usr/local/java文件夹下并解压;

tar -zxvf apache-tomcat-8.5.83.tar.gz

修改/etc/profile配置文件,在最后添加环境变量配置

#java env export JAVA_HOME=/usr/local/java/jdk1.8.0_333 #此处为jdk安装位置 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

运行以下命令使配置生效;

source /etc/profile

在/usr/local文件夹下创建tomcat文件夹;

下载apache-tomcat-8.5.83.tar.gz压缩包,上传到服务器/usr/local/tomcat下并解压;

tar -zxvf apache-tomcat-8.5.83.tar.gz

修改/usr/local/tomcat/apacht-tomcat-8.5.83/bin/start.sh配置文件,在最后添加以下内容;

exec "$PRGDIR"/"$EXECUTABLE" start "$@" #set java environment export JAVA_HOME=/usr/local/java/jdk1.8.0.333 #此处为jdk安装位置 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:%{JAVA_HOME}/bin:%{JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH #tomcat export TOMCAT_HOME=/usr/local/tomcat/apache-tomcat-8.5.83

启动tomcat成功,可正常访问8080端口;

在/usr/local/tomcat/apache-tomcat-8.5.83/webapps/下创建test文件夹,在test文件夹下创建index.html文件内容(为了区别不同服务器上的tomcat),内容自定义即可;

修改/etc/nginx/nginx.conf配置文件,修改内容如下

在http节点中添加

upstream tomcat { server 192.168.98.7:8080; server 192.168.98.14:8080; } server { listen 80; server_name 192.168.98.100; location / { proxy_pass http://tomcat/test/index.html; } }

重启nginx;

server 192.168.98.7:8080; server 192.168.98.14:8080; } server { listen 80; server_name 192.168.98.100; location / { proxy_pass http://tomcat/test/index.html; } }

重启nginx;

访问虚拟ip发现nginx将请求转发到tomcat中;



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有